iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

寫程式一定會面臨修改,所以先前的在套DomainEvent時,需要實作事件本身的版本,序列化後的event store會紀錄當時產生時的版號,以供未來程式異動時,不同的資料長相的對應

impl DomainEvent for ReaderEvent {
    fn event_type(&self) -> String {
        "ReaderEvent".to_string()
    }

    fn event_version(&self) -> String {
        "0.1.0".to_string()
    }
}

第一個是事件的類別,第二個是事件的版本,在持久化儲存之後,如果程式修改新的版本,則需要儘可能保持向下相容性。

比如新開的欄位就需要使用 Option 的方式,避免在 event soucing重滾舊版事件時報錯。

版本的規則可以自己定義,或者依kuma大大所述使用業界標準,版本大部分還是使用語意化版本(Semantic Versioning)

而upcaster是一種把舊版本事件映射到現存程式版本的一個方式,如果隨著程式更迭版本落差太大,則可能需要做一個切點重新migration到新版本上,這部分相對不好處理。

CQRS 對比CRUD讓我們分離了讀寫使用同一個模型,但也增加了另一個部分的複雜度,接下來試試看實作upcaster,看能不能順利實作成功。


上一篇
D23 snapshot size
下一篇
D25 new version of domain event
系列文
當rust 遇上 cqrs & es30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言